package com.liaow.test.jvm;

import java.util.ArrayList;
import java.util.List;

/**
 * @Description: 先自己弄个问题，产生这个STW问题
 * @Author: L.Wen
 * @Create_Time: 2020/09/20 16:48
 */
public class GenerateSTW {

    /**
     * 通过集合引用对象，保证对象不被gc回收
     */
    private List<byte[]> content = new ArrayList<byte[]>();

    public static void main(String[] args) {
        GenerateSTW stw = new GenerateSTW();
        stw.start();
    }

    private void start() {
        while (true) {
            try {
                content.add(new byte[1024 * 10]);
                Thread.sleep(2);
            } catch (OutOfMemoryError | InterruptedException e) {
                // 在不可以分配的时候，进行清理部分空间,继续运行，这样会很快产生下一次垃圾回收
                for (int i = 0; i < 1024; i++) {
                    content.remove(i);
                    try {
                        Thread.sleep(2);
                    } catch (InterruptedException e1) {
                        e1.printStackTrace();
                    }
                }
            }
        }
    }

}
